/**
 * 给定数组A，求数组B，满足
 * 1. A + B 的结果是非降序的
 * 2. B的最大值与最小值之差最小
 * 
 * 贪心即可，对A[i-1]和Ai，
 * 如果本来就是非降序，则Bi为0，否则Bi等于A[i-1]-Ai
 * 即每一次只把Ai补到最低限度
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using llt = long long;
using vi = vector<int>;

int N;
vector<llt> A;

void work(){
    cin >> N;
    A.assign(N, {});
    for(auto & i : A) cin >> i;
    
    vector<llt> ans(N, 0);
    vector<llt> B(A.begin(), A.end());
    for(int i=1;i<N;++i){
        if(B[i] < B[i - 1]){
            ans[i] = B[i - 1] - B[i];
            B[i] = B[i - 1];
        }else{
            ans[i] = 0;
        }
    }

    for(auto i : ans) cout << i << " ";
    cout << "\n";
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--) work();
    return 0;
}